# 作者：位微
# 你不是在写代码而是在解决问题
# 2025年09月18日09时30分13秒
# 2062873410@qq.com
import  torch
class line(torch.autograd.Function):
    @staticmethod
    def forward(ctx,x,w,b):
        ctx.save_for_backward(x,w,b)
        y=x*w+b
        return y
    @staticmethod
    def backward(ctx,dout):
        x,w,b=ctx.saved_tensors
        dw=dout*x
        dx=dout*w
        db=dout
        return dw,dx,db
# rand(),[0,1)的均匀分布
# randn(),均值为1，方差为0的值
x=torch.rand(2,2,requires_grad=True)
w=torch.rand(2,2,requires_grad=True)
b=torch.rand(2,2,requires_grad=True)
print(x)
print(w)
print(b)
out=line.apply(x,w,b)
out.backward(torch.ones(2,2))
print(w.grad,x.grad,b.grad)

